#!/usr/bin/env python
# coding=utf-8
import pretty_errors
from urllib.parse import urlparse, urlunparse, urlsplit, urlunsplit, urljoin, \
    urlencode, parse_qs, parse_qsl, quote, unquote

# 3.1.3 解析链接
# 1.urlparse()
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result), result)
print(result.query)  # 直接访问元组成员
'''
要点:
解析结果为元组形式,可通过下标访问,解析结果对应类型如下
scheme(协议)://netloc(域名)/path(访问路径);params(参数)?query(查询条件)#fragment(锚点)
'''

# DIY测试
rsuser = urlparse('https://buluo.qq.com/p/barindex.html?bid=10362')
print('\nDIY测试,访问元组元素')
print(rsuser.path)

# 2.urlunparse 反向方法,参数长度必须是6
data = ['http', 'www.baidu.com', 'index.html', 'user', 'a=6', 'comment']
print('\n反向拼接url地址')
print(urlunparse(data))

# 3.urlsplit()   解析url地址,params部分并入path中
re3 = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print('\nurlsplit()方法')
print(re3)

# 4. urlunsplit()   合并分割的连接,参数必须是5个
data = ['http', 'www.baidu.com', 'index.html', 'a=6', 'comment']
print('\nurlunsplit()方法')
print(urlunsplit(data))

# 5.urljoin() 链接合并
print('\n略微复杂的链接合并')
print(urljoin('http://www.baidu.com', 'FAQ.html'))
print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', \
              'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', \
              'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc', \
              'https://cuiqingcai.com/index.php'))
print(urljoin('http://www.baidu.com', '?category=2#comment'))
print(urljoin('http://www.baidu.com#comment', '?category=2'))

'''
要点:
urljoin(第一参数,第二参数)
用第二参数的scheme(协议),netloc(域名),path(路径)来替换或补充
第一参数中这三个参数对应的部分和其余的部分,第一参数的params,query,fragment,不起作用
'''

# 6.urlencode() 传递get参数,参数使用字典结构
params = {
    'name': 'germey',
    'age': 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print('\n传递get参数')
print(url)

# 7.parse_qs()  将get请求参数转回字典
query = 'name=germey&age=22'
print('\nget参数回转字典')
print(parse_qs(query))

# 8.parse_qsl() get参数转为元组模式
query = 'name=germey&age=22'
print('\nget参数转为元组模式')
print(parse_qsl(query))

# 9.quote() 将内容转为URL编码格式,避免中文乱码
keyword = '壁纸'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
# url='https://www.baidu.com/s?wd='+keyword  #某些网站可行
print('\nurl编码')
print(url)

# 10.unquote()  url解码
url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
print('\nurl解码')
print(unquote(url))
